void main() {
  // throwKeyword();
  // onStatementBlock();
  // onCatchStatementBlock();
  // onCatchStatementBlock2();
  catchStatementBlock();
  // finallyCatchStatementBlock();
}

void throwKeyword() {
  try {
    testAge(-2);
  } catch (error) {
    print(error);
  }
}

void testAge(int age) {
  if (age < 0) {
    // throw new FormatException("年龄不能小于 0");
    throw FormatException("年龄不能小于 0");
  }
}

void onStatementBlock() {
  int x = 12;
  int y = 0;
  int res;

  // try{
  //  颗粒化
  // }catch(Exception e){
  //
  // }
  // try{
  //   //监管代码块
  // } on IntegerDivisionByZeroException
  // catch(e){
  // //来进处理选择
  // }

  try {
    res = x ~/ y;
  } on UnsupportedError {
    print("除数不能为零");
  }
}

void catchStatementBlock() {
  int x = 12;
  int y = 0;
  int res;

  try {
    //监管，但是不做类型选择
    res = x ~/ y;
  } catch (error) {
    print(error);
  }
}

void onCatchStatementBlock() {
  int x = 12;
  int y = 0;
  int res;

  try {
    res = x ~/ y;
  } on IntegerDivisionByZeroException catch (error) {
    print(error);
  }

}
///IntegerDivisionByZeroException类 零安全
/// 实现类型
/// 例外不支持错误
/// 注释
/// @已弃用（“改为使用 UnsupportedError”）
/// https://api.dart.dev/stable/2.18.5/dart-core/IntegerDivisionByZeroException-class.html
void onCatchStatementBlock2() {
  try {
    try {
      int num = 100 ~/ 0;
    } on UnsupportedError {
      rethrow;//重新抛出一个异常
    }
  } catch (e, stackTrace) {
//将捕获到内层重新抛出的异常
  print(e);
  }
}

void finallyCatchStatementBlock() {
  int x = 12;
  int y = 0;
  int res;

  try {
    res = x ~/ y;
  } on UnsupportedError {
    print("Cannot divide by zero");
  } finally {
    print("Finally block executed");
  }
}
